package hch.redesFerroviarias;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Semaphore;

public class Estacion {
	private int id;
	private Semaphore semaphore;
	private ArrayList<Tren> trenes = new ArrayList<Tren>();
	private int cantidadPasajeros;
	private int nroAndenes;
	private List<Tren> trenesEsperandoIzq = new ArrayList<Tren>();
	private List<Tren> trenesEsperandoDer = new ArrayList<Tren>();


	
	public Estacion(int id, int andenes) {
		this.id = id;
		this.cantidadPasajeros = 0;
		this.semaphore = new Semaphore(andenes);
		this.nroAndenes = andenes;
	}

	//*************//
	//** METHODS **//
	//*************//
	public void agregarPasajero() {
		this.cantidadPasajeros ++;
	}
	
	public void restarPasajero(){
		this.cantidadPasajeros --;
	}
	
	public void addTren(Tren unTren){
		this.trenes.add(unTren);
	}
	
	public void removeTren(Tren unTren){
		this.trenes.remove(unTren);
	}
	public void obetenerAnden(){
		this.semaphore.acquireUninterruptibly();
	}
	
	public void dejarAnden(){
		this.semaphore.release();
	}
	
	//**************//
	//** ACCESORS **//
	//**************//
	public Semaphore getSemaphore() {
		return semaphore;
	}
	
	public List<Tren> getTrenesEsperandoIzq() {
		return trenesEsperandoIzq;
	}
	
	public List<Tren> getTrenesEsperandoDer() {
		return trenesEsperandoDer;
	}
	
	public int getId() {
		return id;
	}

	public ArrayList<Tren> getTrenes() {
		return trenes;
	}
	
	@Override
	public String toString() {
		return "E"+id+" <"+this.nroAndenes+"> "+"("+this.cantidadPasajeros +") "+ this.trenes;
	}

}
